iT邦幫忙

2022 iThome 鐵人賽

DAY 1
0
Software Development

資料結構 - 我好想懂阿!30 天系列系列 第 1

資料結構 - 我好想懂阿!30 天系列 (01) - Stack 堆疊

  • 分享至 

  • xImage
  •  

廢話時間

開始的第一天就生病QQ,好苦啊,我ㄉ鼻子好癢唷

前言

本系列會將各種資料結構進行說明,今天要先介紹的就是 Stack 堆疊 ,進入本章結之前,都可以思考一個問題,資料結構就是為了要解決某項事情而生,也就是人想出來的解法,因此當我們在認識這些資料結構的時候,可以先拋開程式好難呀、觀念好難懂呀這種思維,先從生活中常看到的問題下手 (e.g 自助餐的碟子、洋芋片的罐子),就會好懂許多囉!

Stack特性

前言所提到的洋芋片罐子的例子,可以很清楚知道「先放進去的洋芋片最後才能吃」,也就是後進的會先吃到,因此就可以談到 Stack 最重要的特性

  • LIFO (Last In First Out)

當我們從罐子拿起一片或放回不想吃的洋芋片的時候,就像是從堆疊裡面取出資料或是新增資料,因此我們也可以推出

  • 僅能由頂端取得、新增、刪除資料

製作方法

利用Array製作Stack

create(){
	// 宣告陣列 [1.....n]
	// 宣告 top = 0
}
push(s,item){
	if(s is not full){ // 當堆疊資料還沒滿的時候
		top++; 
		s[top] = item; // item 放入 Top
	}
}
pop(s){
	if(s is not empty){ // 當堆疊資料並非空的時候
		item = s[top]; // 先取得頂端資料
		top--; // 將 top 往下移一格
		return item 
	}
}

利用Linklist製作Stack

create(){
	// top pointer initial nil
	struct node{
		int data;
		struct node *next;
	}
}
push(item){
	t = new(node);
	t->data = item;
	t->next = top;
	top = t;
}
pop(){
	if(top is nil){
		return "isempty";
	}
	else{
		t = top;
		item = top->data;
		top = top->next;
		delete(t);
	}
	return item;
}

請注意一下這邊只是告訴大家要怎麼寫,實際在寫的時候不要像我一樣一筆帶過唷ヽ(*´∀`)ノ゚


下一篇
資料結構 - 我好想懂阿!30 天系列 (02) - Queue 佇列
系列文
資料結構 - 我好想懂阿!30 天系列30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言